package Day015_File类_递归_IO流.demo06_字节输出流;

import java.io.File;
import java.io.FileOutputStream;

/**
 * @author zhangyan
 * @date 2020/5/6 14:08
 */
/*
    FileOutputStream类 是OutputStream抽象类的子类

    构造方法:
        public FileOutputStream(File file) ：创建文件输出流以写入由指定的 File对象表示的文件(路径)
        public FileOutputStream(String name) ： 创建文件输出流以指定的名称写入文件(路径)

        1.以上两个构造方法,如果目的地文件为非空文件,就会清空文件内容
        2.以上两个构造方法,如果传入的目的地文件不存在,就会新建一个空文件
        3.创建的默认就是文件 不可能是目录

    成员方法:
        public void close() ：关闭此输出流并释放与此流相关联的任何系统资源
        public void flush() ：刷新此输出流并强制任何缓冲的输出字节被写出
        public abstract void write(int b) ：写出一个字节数据
        public void write(byte[] b) ：将字节数组中的所有数据写出
        public void write(byte[] b, int off, int len) ：写出指定长度的字节数组数据,off开始 写len个

    数据追加续写:(重写的构造方法)
            public FileOutputStream(File file,boolean append)
            public FileOutputStream(String name,boolean append)
                true,追加续写   false,清空后覆盖  不写默认false

    写换行:
            \r\n  windows系统换行符
            \r    Mac系统
            \n    Unix系统
 */

public class Test2_FileOutputStream类 {
    public static void main(String[] args) throws Exception{
    /*
        //构造方法
        //1. 以File形式的文件路径创建FileOutputStream
        File file = new File("Demo02\\aaa\\a.txt");
        FileOutputStream fos1 = new FileOutputStream(file);

        //2. 以String形式的文件路径创建FileOutputStream
        FileOutputStream fos2 = new FileOutputStream("Demo02\\aaa\\b.txt");
    */

        //成员方法

        //1.写出字节
        //创建字节输出流对象,关联目的地文件路径
        File file = new File("Demo02\\aaa\\a.txt"); //这一步会清空!
        FileOutputStream fos = new FileOutputStream(file);
        //写数据
        fos.write('a'); // a
        fos.write(98); // b
        //关闭流释放资源
        fos.close();

        /*
            a.txt是在硬盘上,程序是运行在内存中,创建流关联文件,'a'字符写出去,写出的是a字节的字符数据:97-->对应的二进制数
            a.txt是在硬盘上,程序是运行在内存中,创建流关联文件,写出的是98-->对应的二进制数
            一个字节=8个二进制位,a.txt是文本文件,会把字节转换成字符'b'    显示98,是2个字符'9''8'
        */


        //2.写出字节数组
        byte[] bytes = {98,99,100,97};
        //创建字节输出流对象,关联目的地文件路径
        File file1 = new File("Demo02\\aaa\\b.txt"); //这一步会清空!
        FileOutputStream fos1 = new FileOutputStream(file1);
        //写数据
        fos1.write(bytes); //bcda
        //关闭流释放资源
        fos1.close();


        //3.写出指定长度的字节数组
        byte[] bytes1 = {98,99,100,97};
        //创建字节输出流对象,关联目的地文件路径
        File file2 = new File("Demo02\\aaa\\c.txt"); //这一步会清空!
        FileOutputStream fos2 = new FileOutputStream(file2);
        //写数据
        fos2.write(bytes1,1,2); //cd
        //关闭流释放资源
        fos2.close();

        //4.追加续写
        File file3 = new File("Demo02\\aaa\\a.txt");
        FileOutputStream fos3 = new FileOutputStream(file3,true);
        //写数据
        fos3.write('c'); // abc
        //关闭流释放资源
        fos3.close();

        //5.换行
        File file4 = new File("Demo02\\aaa\\d.txt");
        FileOutputStream fos4 = new FileOutputStream(file4);
        //写数据
        //String类的 byte[] getBytes();把字符串转换为byte数组
        //char[] arr = str.toCharArray(); 把字符串转换成char数组

        fos4.write("吟诗一首\r\n".getBytes());

        fos4.write("看着风景美如画\r\n".getBytes());

        fos4.write("吟诗一首赠天下\r\n".getBytes());

        fos4.write("奈何本人没文化\r\n".getBytes());

        fos4.write("只能卧槽浪好大\r\n".getBytes());
        //关闭流释放资源
        fos4.close();
    }
}
